package com.wzy.netty.nio;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * 描述  : 堆外存储,MappedByteBuffer 可以让文件直接在内存中进行修改，操作系统不需要额外在复制一次
 * 创建人:    Wzy
 * 创建时间: 2020-06-10  15:13
 */
public class MappedByteBufferTest {
    public static void main(String[] args) throws IOException {
        RandomAccessFile randomAccessFile = new RandomAccessFile("01.txt", "rw");

        //获取对应的文件通道

        FileChannel channel = randomAccessFile.getChannel();
        /**
         * 参数1 :FileChannel.MapMode.READ_WRITE 使用的读写模式
         * 参数2 : 可以直接修改起始位置
         * 参数3 : 映射到内存中的大小, 单位是 字节，这里是从 索引为0开始 最多修改5个字节 ， 即修改的范围就是这么多
         */
        MappedByteBuffer mappedByteBuffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);

//       进行修改
        mappedByteBuffer.put(0, (byte) 'H');
        randomAccessFile.close();
    }
}
